name: Test documentation snippets for Haystack 2.x

on:
  workflow_dispatch: # Activate this workflow manually
  push:
    branches:
      - main
  pull_request:
    paths:
      - examples/**
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review

env:
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
  PYTHON_VERSION: "3.8"
  HATCH_VERSION: "1.9.3"

jobs:
  black:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "${{ env.PYTHON_VERSION }}"

      - name: Install Hatch
        run: pip install hatch==${{ env.HATCH_VERSION }}

      - name: Check status
        run: hatch run default:format-check

      - name: Calculate alert data
        id: calculator
        shell: bash
        if: (success() || failure()) && github.ref_name == 'main'
        run: |
          if [ "${{ job.status }}" = "success" ]; then
            echo "alert_type=success" >> "$GITHUB_OUTPUT";
          else
            echo "alert_type=error" >> "$GITHUB_OUTPUT";
          fi

      - name: Send event to Datadog
        if: (success() || failure()) && github.ref_name == 'main'
        uses: masci/datadog@v1
        with:
          api-key: ${{ secrets.CORE_DATADOG_API_KEY }}
          api-url: https://api.datadoghq.eu
          events: |
            - title: "${{ github.workflow }} workflow"
              text: "Job ${{ github.job }} in branch ${{ github.ref_name }}"
              alert_type: "${{ steps.calculator.outputs.alert_type }}"
              source_type_name: "Github"
              host: ${{ github.repository_owner }}
              tags:
                - "project:${{ github.repository }}"
                - "job:${{ github.job }}"
                - "run_id:${{ github.run_id }}"
                - "workflow:${{ github.workflow }}"
                - "branch:${{ github.ref_name }}"
                - "url:https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"

  tests:
    name: Snippets
    needs: black
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "${{ env.PYTHON_VERSION }}"

      - name: Install Hatch
        run: pip install hatch==${{ env.HATCH_VERSION }}

      - name: Get changed files
        id: files
        uses: tj-actions/changed-files@v42
        with:
          files: |
            examples/**.py

      - name: Run each snippet
        run: |
          CHANGED_FILES=${{ steps.files.outputs.all_changed_files }}
          for file in $CHANGED_FILES; do
            hatch run snippets:python "$file"
          done

      - name: Calculate alert data
        id: calculator
        if: (success() || failure()) && github.ref_name == 'main'
        shell: bash
        run: |
          if [ "${{ job.status }}" = "success" ]; then
            echo "alert_type=success" >> "$GITHUB_OUTPUT";
          else
            echo "alert_type=error" >> "$GITHUB_OUTPUT";
          fi

      - name: Send event to Datadog
        if: (success() || failure()) && github.ref_name == 'main'
        uses: masci/datadog@v1
        with:
          api-key: ${{ secrets.CORE_DATADOG_API_KEY }}
          api-url: https://api.datadoghq.eu
          events: |
            - title: "${{ github.workflow }} workflow"
              text: "Job ${{ github.job }} in branch ${{ github.ref_name }}"
              alert_type: "${{ steps.calculator.outputs.alert_type }}"
              source_type_name: "Github"
              host: ${{ github.repository_owner }}
              tags:
                - "project:${{ github.repository }}"
                - "job:${{ github.job }}"
                - "run_id:${{ github.run_id }}"
                - "workflow:${{ github.workflow }}"
                - "branch:${{ github.ref_name }}"
                - "url:https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
